맨위로가기

주소 공간

"오늘의AI위키"는 AI 기술로 일관성 있고 체계적인 최신 지식을 제공하는 혁신 플랫폼입니다.
"오늘의AI위키"의 AI를 통해 더욱 풍부하고 폭넓은 지식 경험을 누리세요.

1. 개요

주소 공간은 컴퓨터 시스템에서 데이터를 식별하고 접근하기 위한 주소들의 집합을 의미한다. 메모리, 파일, 네트워크 등 다양한 자원을 주소 공간을 통해 관리하며, 주소 공간은 메모리 주소, 파일 주소, 네트워크 주소 공간으로 구분된다. 운영체제는 사용자 프로세스가 사용하는 사용자 공간과 커널이 사용하는 커널 공간으로 주소 공간을 분리하여 시스템의 안정성과 보안을 강화한다. 또한, 주소 변환을 통해 논리적인 주소를 물리적인 주소로 매핑하며, 주소 공간의 크기는 CPU의 주소 버스 크기에 따라 결정된다.

2. 주소 공간의 개념과 종류

주소 공간은 시스템 자원에 접근하는 데 사용되는 식별자를 정의하며, 다양한 형태로 나타난다. 주소 공간의 종류는 다음과 같다.


  • 거리 주소: 주택 번호, 마을의 거리 주소
  • 메모리: 메인 메모리, 가상 메모리, 입출력 포트 공간
  • 하드 드라이브: 실린더 헤드 섹터 구조


리눅스 커널의 경우 다음 주소 공간을 예로 들 수 있다.

  • 커널 가상 주소 공간
  • 사용자 가상 주소 공간 (커널이 copy_to_user(), copy_from_user()와 비슷한 기능을 통해 접근)
  • 입출력 메모리 (커널이 readb(), writel(), memcpy_toio()와 같은 것을 통해 접근)


주소는 확장 버스의 장치 주소 등에 사용된다.[1]

2. 1. 메모리 주소 공간

메모리 주소는 주 기억 장치, 메모리 맵 I/O, 가상 메모리 등에 사용된다.[1]

2. 2. 파일 주소 공간

디스크 상의 파일이나 볼륨 내의 특정 위치를 가리키는 주소이다.[1]

2. 3. 네트워크 주소 공간

컴퓨터 네트워크에서 장치나 호스트를 식별하는 데 사용되는 주소이다. IP 주소, URL 등이 이에 해당한다.

3. 운영 체제와 주소 공간

운영 체제는 프로세스에 주소 공간을 할당하고 관리하며, 사용자 공간과 커널 공간을 분리하여 시스템 안정성을 유지한다.

커널 공간은 운영 체제인 커널이 존재하는 가상 메모리 영역이다. 리눅스에서는 모든 커널 스레드가 존재하는 주소 공간이다. 가상 메모리 방식에 따라 가상 주소의 특정 범위를 차지하거나, 다중 가상 메모리의 하나의 가상 공간을 커널 공간으로 사용한다. 전자의 경우, 사용자 프로세스가 해당 범위의 주소에 접근하면 예외가 발생한다. 커널은 사용자 공간에 접근할 수 있지만, 물리 메모리가 매핑되지 않은 경우가 있을 수 있다.[1]

3. 1. 프로세스와 주소 공간

일반적으로 운영 체제는 하나의 프로세스에 대하여 하나의 주소 공간을 제공하며, 프로세스 내의 사용자 스레드들은 주소 공간을 공유한다.[1]

C/C++ 등으로 프로그램을 하고 컴파일 과정과 링크를 거치면 실행 파일이 만들어진다. 실행 파일의 메모리 맵은 데이터 특성에 따라 나누어 저장되어 실행되도록, 하나의 메모리 공간으로 규정하고 차례로 배치된다. OS에 의해 메모리에 적재되어 실행되려면 우선 해당 메모리 공간을 할당받고 적재되어야 한다. 메모리 공간을 할당할 때, 메모리 자원을 할당하는 물리적 주소는 프로그램 실행 파일에서 제시된 메모리 맵의 주소값과 다른 것이 보통인데, 이를 중개하는 것이 MMU이다. OS에 의해 할당된 물리적 주소는 전체 CPU 입장에서의 주소 공간이므로 프로세서의 논리 주소와는 접근 단위로 변환이 이루어져야 하므로 논리회로에 의해 고속 변환이 이루어져야 한다. 그리고 한 개의 프로세스라도 물리적 메모리에 순차적으로 적재되지 않을 수 있다.[1]

'''사용자 공간''' 또는 "사용자 가상 주소 공간"은 사용자의 프로세스가 동작하는 주소 공간이다.[1] 컴퓨터 시스템에서 동작하는 각 프로세스는 그에 대응하는 데이터와 코드를 가지며, 실행 중에는 그것들이 사용자 공간에 로드된다.[1] 사용자 공간은 프로세스마다 할당되며, 각각의 주소 범위는 같다.[1] 따라서, 가상 메모리 방식의 OS에서는 사용자 프로그램의 코드와 데이터는 같은 주소에서 시작하도록 되어 있는 경우가 많다.[1]

3. 2. 사용자 공간과 커널 공간

'''사용자 공간''' 또는 "사용자 가상 주소 공간"은 사용자 프로세스가 동작하는 주소 공간이다. 컴퓨터 시스템에서 동작하는 각 프로세스는 그에 대응하는 데이터와 코드를 가지며, 실행 중에는 그것들이 사용자 공간에 로드된다. 사용자 공간은 프로세스마다 할당되며, 각각의 주소 범위는 같다. 따라서, 가상 메모리 방식의 OS에서는 사용자 프로그램의 코드와 데이터는 같은 주소에서 시작하도록 되어 있는 경우가 많다.

'''커널 공간''' 또는 "커널 가상 주소 공간"은 운영 체제인 커널이 존재하는 가상 메모리 영역이다. 리눅스에서는 모든 커널 스레드가 존재하는 주소 공간이다. 가상 메모리 방식에 따라 가상 주소의 특정 범위를 차지하는 경우와, 다중 가상 메모리의 하나의 가상 공간을 커널 공간으로 사용하는 경우가 있다. 전자의 경우, 사용자 프로세스가 해당 범위의 주소에 접근하려고 하면 예외가 발생한다. 반대로 커널에서는 사용자 프로세스가 차지하는 사용자 공간에도 접근할 수 있지만, 어디까지나 가상이므로 물리 메모리가 매핑되지 않은 경우가 있어 주의가 필요하다.

4. 주소 변환 (Address Translation)

가상 메모리 시스템에서는 가상 주소와 물리 주소 간의 변환이 필요하며, 이는 메모리 관리 장치(MMU)를 통해 이루어진다.[1]

일반적으로 OS에 의해 할당된 물리적 주소는 CPU 전체의 주소 공간이므로, 프로세서의 논리 주소와는 액세스 단위로 변환되어야 한다. 이 변환은 논리회로를 통해 빠르게 처리된다.[1] 한 프로세스가 물리적 메모리에 순차적으로 적재되지 않을 수도 있다.[1]

주소 공간은 여러 계층으로 매핑 및 변환되는 특징을 가진다.[1] 예를 들어, 파일 시스템의 논리 디스크는 선형 섹터 번호를 사용하며, 이는 절대 LBA 섹터 주소로 변환된다.[1] 병렬 ATA로 연결된 디스크 드라이브는 논리 실린더-헤드-섹터 주소로 변환된 후, 디스크 컨트롤러에 의해 다시 LBA로 변환되고, 최종적으로 물리적 실린더, 헤드, 섹터 번호로 변환된다.[1]

도메인 이름 시스템은 이름을 네트워크 주소(주로 IP 주소)로 매핑하며, 이는 주소 결정 프로토콜을 통해 링크 계층 네트워크 주소로 매핑될 수 있다.[1] 네트워크 주소 변환은 서로 다른 IP 공간의 경계에서 발생한다.[1]

논리 블록 주소 지정 방식에서 물리적 형상으로의 변환

4. 1. 가상 주소와 물리 주소

운영 체제는 일반적으로 하나의 프로세스에 대해 하나의 주소 공간을 제공하며, 프로세스 내의 사용자 스레드들은 주소 공간을 공유한다. 프로그램이 실행될 때, MMU는 프로그램의 논리적 주소를 실제 메모리의 물리 주소로 변환한다.

가상 주소 공간과 물리적 주소 공간의 관계


가상 메모리에서 가상 주소 공간의 페이지들은 페이지 파일이나 주 메모리의 물리 주소 공간에 매핑된다. 여러 가상 주소가 하나의 물리 주소를 참조할 수 있으며, 단일 가상 주소가 여러 물리 주소에 매핑될 수도 있다.

가상 기억 장치 방식에서는 가상 주소와 물리 주소를 대응시키기 위해 주소 변환이 필요하다. 페이징 방식이나 세그먼트 방식을 사용하면 변환이 복잡해질 수 있다. 다중 가상 기억 장치 방식에서는 여러 가상 주소 공간 내의 주소가 물리적으로 같은 위치를 가리키는 경우도 있다.

4. 2. 주소 변환 메커니즘

운영 체제는 일반적으로 하나의 프로세스에 대해 하나의 주소 공간을 제공하며, 프로세스 내의 사용자 스레드들은 주소 공간을 공유한다. 주소 공간은 여러 계층을 형성하는 매핑 및 변환의 특징을 가진다.

예를 들어, 논리 디스크의 파일 시스템은 선형 섹터 번호를 사용하여 작동하며, 이는 간단한 경우 파티션의 첫 번째 섹터 주소를 덧셈을 통해 '절대' LBA 섹터 주소로 변환해야 한다. 병렬 ATA를 통해 연결된 디스크 드라이브의 경우, 인터페이스의 역사적 단점 때문에 각각 '논리' 실린더-헤드-섹터 주소로 변환되어야 한다. 그런 다음, 디스크 컨트롤러에 의해 LBA로 다시 변환된 다음, 마지막으로 '물리적' 실린더, 헤드 및 섹터 번호로 변환된다.

도메인 이름 시스템은 해당 이름을 네트워크별 주소(일반적으로 IP 주소)로 매핑하며, 이는 차례로 주소 결정 프로토콜을 통해 링크 계층 네트워크 주소로 매핑될 수 있다. 네트워크 주소 변환근거리 통신망 및 인터넷과 같이 '다른' IP 공간의 가장자리에서 발생할 수 있다.

가상 메모리는 가상-물리 주소 변환의 대표적인 예시이다. 가상 주소 공간의 다양한 페이지는 페이지 파일 또는 주 메모리 물리 주소 공간에 매핑된다. 수치적으로 다른 여러 가상 주소가 모두 하나의 물리적 주소, 즉 RAM의 동일한 물리적 바이트를 참조하는 것이 가능하다. 또한 단일 가상 주소가 0개, 1개 또는 둘 이상의 물리적 주소에 매핑되는 것도 가능하다.

가상 기억 장치 방식에서 가상 주소 공간과 물리 주소 공간을 대응시키기 위해 주소 변환이 필요하다. 가상 주소 공간이 그대로 물리 주소 공간에 존재한다면 단순히 어떤 오프셋의 덧셈, 뺄셈으로 변환이 끝나지만, 실제로는 페이징 방식이나 세그먼트 방식이 사용되기 때문에 변환은 다소 복잡해진다. 다중 가상 기억 장치 방식에서는 여러 가상 주소 공간 내의 주소가 물리적으로 같은 위치를 가리키는 경우도 있다.

5. 주소 공간의 크기

CPU주소 버스 크기에 따라 주소 공간의 크기가 결정된다. 주소 버스가 32비트인 시스템에서는 2^{32}개의 서로 다른 주소를 식별할 수 있으므로 0부터 2^{32}-1까지의 주소 범위를 제공할 수 있다.

8비트 마이크로프로세서의 주소 공간은 대부분 16비트를 갖는다. 액세스 단위는 8비트이다. 그러나 8비트 MCU의 많은 경우는 한 개의 CPU 내에서도 8 또는 16비트의 주소 공간을 가진다. 이러한 주소 공간은 C 프로그램에서 구별할 수 있는 수단을 제공하며, 개발자가 지정할 수 있다.

참조

[1] 웹사이트 IPv4 Address Space Registry https://www.iana.org[...] Internet Assigned Numbers Authority (IANA) 2011-09-01
[2] 웹인용 IPv4 Address Space Registry https://web.archive.[...] Internet Assigned Numbers Authority (IANA) 2009-03-15



본 사이트는 AI가 위키백과와 뉴스 기사,정부 간행물,학술 논문등을 바탕으로 정보를 가공하여 제공하는 백과사전형 서비스입니다.
모든 문서는 AI에 의해 자동 생성되며, CC BY-SA 4.0 라이선스에 따라 이용할 수 있습니다.
하지만, 위키백과나 뉴스 기사 자체에 오류, 부정확한 정보, 또는 가짜 뉴스가 포함될 수 있으며, AI는 이러한 내용을 완벽하게 걸러내지 못할 수 있습니다.
따라서 제공되는 정보에 일부 오류나 편향이 있을 수 있으므로, 중요한 정보는 반드시 다른 출처를 통해 교차 검증하시기 바랍니다.

문의하기 : help@durumis.com